// 懒得再次复现一个日期类了
// 所以从上次作业复制黏贴了
// 这里的主要考察点就是要对一个日期类的复现,以及对运算符的重载
// 我们接受到两组数字,把两个转换成为日期类即可

#pragma once
#include <iostream>

using namespace std ;

// 日期类的声明

class Date
{

    // 成员属性(私有)

    private:

        int Year ;

        int Month ;

        int Day ;

    // 成员函数(公有)

    public:

        // 构建友元函数声明

        friend ostream& operator<< (ostream& out , const Date& date) ;

        friend istream& operator>> (istream& in , Date& date) ;
    
        // 构建显式构造函数

        Date (int _year = 1 , int _month = 1 , int _day = 1) ;
        
        // 构建显示拷贝构造函数
        
        Date (const Date& date) ; // 这里要用引用,不然会在语法逻辑上无穷递归

        // 析构函数

        ~Date () ;

        // 只要不改变调用对象的都建议加const

        int GetMonthDay (const int& year , const int& month) const ;

        Date& operator+= (const int& day) ;

        Date& operator-= (const int& day) ;

        // 为了减少拷贝,尽量使用函数复用,减少临时变量的拷贝

        Date operator + (const int& day) const ;

        Date operator - (const int& day) const ;

        // 日期 - 日期  难

        int operator- (const Date& date) const ;

        // ++date -> operator++ () ;

        Date& operator++ () ;

        // date++ -> operator++ (int) ; 这里的语法规定,后置加加必须要在括号里面加int作识别(纯规定,你杠就是你对)

        Date operator++ (int) ;

        // --date -> operator-- () ;

        Date& operator-- () ;

        // date++ -> operator-- (int)

        Date operator-- (int) ;

        // 判断操作符重载

        bool operator== (const Date& date) const ;

        bool operator!= (const Date& date) const ;

        bool operator> (const Date& date) const ;

        bool operator>= (const Date& date) const ;

        bool operator< (const Date& date) const ;

        bool operator<= (const Date& date) const ;

        // 检查是否是同一天数

        bool CheckDate () ;

        // 打印

        void Print () const ;

        void inDay (int i)
        {

            Day = i % 100 ;

            i /= 100 ;

            Month = i % 100 ;

            i /= 100 ;

            Year = i ;

        }
        
} ;

ostream& operator<< (ostream& out , const Date& date) ;

istream& operator>> (istream& in , Date& date) ;

// 友元函数的实现

ostream& operator<< (ostream& out , const Date& date)
{

    out << date.Year << "年" << date.Month << "月" << date.Day << "日" << endl ;

    return out ;

}

istream& operator>> (istream& in , Date& date)
{

    while (1)
    {

        cout << "请依次输入年月日:>" ;

        in >> date.Year >> date.Month >> date.Day ;

        if (date.CheckDate ())
        {

            break ;

        }

        else
        {

            cout << "日期非法,请重新输入" << endl ;

        }

    }

    return in ;

}

// 日期类的实现

Date :: Date (int _year , int _month , int _day)
{

    Year = _year ;

    Month = _month ;

    Day = _day ;

    // cout << "Date (int _year , int _month , int _day)" << endl ;

}

Date :: Date (const Date& date)
{

    Year = date.Year ;

    Month = date.Month ;

    Day = date.Day ;

    // cout << "Date (const Date& date)" << endl ;

}

Date :: ~Date ()
{

    Year = 0 ;

    Month = 0 ;

    Day = 0 ;

    // cout << "~Date ()" << endl ;

}

int Date :: GetMonthDay (const int& year , const int& month) const
{

    int arrday [13] = { -1 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ;

    if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
    {

        return 29 ;

    }

    return arrday [month] ;

}

Date& Date :: operator+= (const int& day) // 此函数没有拷贝
{

    Day += day ;

    while (Day > GetMonthDay (Year , Month))
    {

        Day -= GetMonthDay (Year , Month) ;

        Month++ ;

        if (Month > 12)
        {

            Month = 1 ;

            Year++ ;

        }

    }

    return *this ;

}

Date& Date :: operator-= (const int& day) // 此函数没有拷贝
{

    Day -= day ;

    while (Day <= 0)
    {

        Day += GetMonthDay (Year , Month) ;

        Month-- ;

        if (Month <= 0)
        {

            Month = 12 ;

            Year-- ;

        }

    }

    return *this ;

}

Date Date :: operator+ (const int& day) const
{

    Date tmp (*this) ; // 这里为拷贝构造

    tmp += day ;

    return tmp ; // 这里将值拷贝到了临时变量上

}

Date Date :: operator- (const int& day) const
{

    Date tmp (*this) ; // 这里为拷贝构造

    tmp -= day ;

    return tmp ; // 这里也是拷贝构造
    
}

int Date :: operator- (const Date& date) const
{

    Date max = *this ;

    Date min = date ;

    int flag = 1 ;

    if (*this < date)
    {

        max = date ;

        min = *this ;

        flag = -1 ;

    }

    int n = 0 ;

    while (max != min)
    {

        min += 1 ;

        n++ ;

    }

    return n * flag ;
    
}

Date& Date :: operator++ ()
{

    *this += 1 ;

    return *this ;

}

Date Date :: operator++ (int)
{

    Date tmp (*this) ;

    *this += 1 ;

    return tmp ;

}

Date& Date :: operator-- ()
{

    *this -= 1 ;

    return *this ;

}

Date Date :: operator-- (int)
{

    Date tmp = *this ;

    *this -= 1 ;

    return tmp ;

}

bool Date :: operator== (const Date& date) const
{

    return Year == date.Year
        && Month == date.Month
        && Day == date.Day ;

}

bool Date :: operator!= (const Date& date) const
{


    return !(this -> operator== (date)) ;

}

bool Date :: operator> (const Date& date) const
{

    if (Year > date.Year)
    {

        return true ;

    }

    else if (Year == date.Year && Month > date.Month)
    {

        return true ;

    }

    else if (Year == date.Year && Month == date.Month && Day > date.Day)
    {

        return true ;

    }

    return false ;

}

bool Date :: operator>= (const Date& date) const
{

    return !(this -> operator< (date)) ;

}

bool Date :: operator< (const Date& date) const
{

    return (!(this -> operator> (date)) && (this -> operator!= (date))) ;

}

bool Date :: operator<= (const Date& date) const
{

    return !(this -> operator> (date)) ;

}

bool Date :: CheckDate ()
{

    if (Month > 12 && Month < 1 && Day != GetMonthDay (Year , Month))
    {

        return false ;

    }

    return true ;

}

void Date :: Print () const
{

    cout << Year << "/" << Month << "/" << Day << endl ;

}

int main() 
{

    int a, b ;

    while (cin >> a >> b) 
    { // 注意 while 处理多个 case

        Date d1 ;

        Date d2 ;

        d1.inDay(a) ;

        d2.inDay(b) ;

        if (d1 == d2)
        {

            cout << "2" ;

        }

        else 
        {

            int n = d2 - d1 ;

            cout << n + 1 ;
        
        }

    }
}
// 64 位输出请用 printf("%lld")